#ifndef _KEYBOARD_H
#define _KEYBOARD_H

#include <windows.h>

#include "StringUtils.h"
#include "Logger.h"
#include "Keys.h"
#include "KeyState.h"

#ifdef GALLIUMENGINE_DLL 
#define GALLIUMENGINE_API __declspec( dllexport )
#else
#define GALLIUMENGINE_API __declspec( dllimport )
#endif

namespace GalliumEngine
{

	class Keyboard
	{
	private:
		static KeyStates::KeyState States[Keys::KeysCount];
		static KeyStates::KeyState PreviousStates[Keys::KeysCount];
		static HWND handle;
	public:
		GALLIUMENGINE_API static void initialize(HWND hWnd);
		GALLIUMENGINE_API static void updateKeyState(Keys::Key key, RAWKEYBOARD& InputData);
		GALLIUMENGINE_API static void update(RAWKEYBOARD& InputData);
		GALLIUMENGINE_API static bool isKeyUp(Keys::Key k);
		GALLIUMENGINE_API static bool isKeyDown(Keys::Key k);
		GALLIUMENGINE_API static bool isKeyHeld(Keys::Key k);
		GALLIUMENGINE_API static bool isKeyReleased(Keys::Key k);
	};
}

#endif
